﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Modelo;
using System.Data.Entity;

namespace Datos
{
    public class ArticuloDAL
    {
        /// <summary>
        /// Agrega un articulo 
        /// </summary>
        /// <param name="articulo"></param>
        public void AddArticulo(Articulo articulo)
        {
            using (var db = new FerreteriaContext())
            {
                db.Articulos.Add(articulo);
                db.SaveChanges();

                Stock stock = new Stock();
                stock.ArticuloId = GetArticuloByCodigo(articulo.Codigo).ArticuloId;
                stock.Cantidad = articulo.Cantidad;

                new StockDAL().AddStock(stock);
            }
        }

        /// <summary>
        /// Obtiene todos los articulos 
        /// </summary>
        /// <returns></returns>
        public List<Articulo> GetArticulos()
        { 
            using (var db = new FerreteriaContext())
            {
                var articulos = from a in db.Articulos
                                 orderby a.Nombre
                                 select a;
                return articulos.ToList();
            }
        }

        /// <summary>
        /// Borra un articulo
        /// </summary>
        /// <param name="articulo"></param>
        public void DeleteArticulo(Articulo articulo)
        {
            using (var db = new FerreteriaContext())
            {
                db.Articulos.Remove(articulo);
                db.SaveChanges();
            }
        }

        /// <summary>
        /// Obtiene un articulo por el codigo de la base de datos
        /// </summary>
        /// <param name="codigo"></param>
        /// <returns></returns>
        public Articulo GetArticuloByCodigo(string codigo)
        {
            using (var db = new FerreteriaContext())
            {
                Articulo articulo = (from a in db.Articulos
                                     where a.Codigo == codigo
                                     select a).SingleOrDefault();

                return articulo;
            }
        }

        /// <summary>
        /// Obtiene una lista de articulos de la base de datos por
        /// el codigo pasado como parametro
        /// </summary>
        /// <param name="codigo"></param>
        /// <returns></returns>
        public List<Articulo> GetArticulosByCodigo(string codigo)
        {
            using (var db = new FerreteriaContext())
            {
                List<Articulo> obj = (from a in db.Articulos
                                      where a.Codigo.Contains(codigo)
                                      select a).ToList();
                return obj;
            }
        }

        /// <summary>
        /// Obtiene una lista de articulos de la base de datos por
        /// el nombre pasado como parametro
        /// </summary>
        /// <param name="codigo"></param>
        /// <returns></returns>
        public List<Articulo> GetArticulosByNombre(string nombre)
        {
            using (var db = new FerreteriaContext())
            {
                List<Articulo> obj = (from a in db.Articulos
                                      where a.Nombre.Contains(nombre)
                                      select a).ToList();
                return obj;
            }
        }

        /// <summary>
        /// Obtiene una lista de articulos de la base de datos por el 
        /// articulo pasado como parametro
        /// </summary>
        /// <param name="articulo"></param>
        /// <returns></returns>
        public List<Articulo> GetArticulosByArticulo(Articulo articulo)
        {
            using (var db = new FerreteriaContext())
            {
                List<Articulo> obj = (from a in db.Articulos
                                     where a.Codigo.Contains(articulo.Codigo)
                                     select a).ToList();
                return obj;
            }
        }

        

        public Articulo GetArticuloById(int id)
        {
            using (var db = new FerreteriaContext())
            {
                Articulo articulo = (from a in db.Articulos
                                     where a.ArticuloId == id
                                     select a).SingleOrDefault();
                return articulo;
            }
        }

        public void UpdateArticulo(Articulo articulo)
        {
            using (var db = new FerreteriaContext())
            {
                db.Entry(articulo).State = EntityState.Modified;
                db.SaveChanges();
            }
        }
    }
}
